#include<stdio.h>
#include<unistd.h>
#include <string.h>
#include <sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>

int main()
{
  const char*msg1="hello printf\n";
  const char*msg2="hello fwrite\n";
  const char*msg3="hello write\n";
  printf("%s\n",msg1);
  fwrite(msg2,strlen(msg2),1,stdout);
  write(1,msg3,strlen(msg3));
  fork();

  //close(1);
  //int fd=open("myfile",O_WRONLY|O_CREAT|O_CREAT,0666);
  //if(fd<0)
  //{
  //  perror("open");
  //  return 1;
  //}
  //printf("fd:%d\n",fd);
  //fflush(stdout);
  //close(fd);
 // char buf[100];
 // ssize_t s=read(0,buf,sizeof(buf));
 // if(s>0)
 // {
 //   buf[s]=0;
 //   write(1,buf,strlen(buf));
 //   write(2,buf,strlen(buf));
 // }
  //系统接口读文件
 //int fd=open("myfile",O_RDONLY,0666);
 //if(fd<0)
 //{
 //  perror("open");
 //  return 1;
 //}
 //char* buf[100];
 //const char* msg="hello linux!\n";
 //while(1)
 //{
 //  ssize_t s=read(fd,buf,strlen(msg));
 //  if(s>0)
 //  {
 //   printf("%s\n",buf); 
 //  }
 //  else{
 //    break;
 //  }
// }
 
  //系统接口写文件
 //umask(0);
 //int fd=open("myfile",O_WRONLY|O_CREAT,0666);
 //if(fd<0)
 //{
 //  perror("open");
 //  return 1;
 //}
 //int count=5;
 //const char*msg="hello Linux!\n";
 //while(count)
 //{
 //  write(fd,msg,strlen(msg));
 //  count--;
 //}
 //close(fd);
  return 0;
}


//
//int main() {
//    // 1. 打开文件（w+：读写模式，文件不存在则创建）
//    FILE *fp = fopen("test.txt", "w+");
//    if (fp == NULL) {
//        perror("文件打开失败");
//        return 1;
//    }
//
//    // 2. 写入测试内容（固定字符串，方便控制长度）
//    const char *msg = "hello File operator!";
//    size_t write_len = fwrite(msg, 1, strlen(msg), fp);
//    printf("已写入内容:%s（长度：%zu）\n", msg, write_len);
//
//
//    // 3. fseek：移动到开头+6字节（跳过 "hello "）
//    fseek(fp, 6, SEEK_SET);
//    printf("->fseek移动指针到开头+6字节\n");
//
//
//    // 4. ftell：获取当前位置（验证偏移）
//    long pos = ftell(fp);
//    printf("->ftell 当前位置：%ld 字节\n", pos);
//
//
//    // 5. 读取偏移后的内容（严格控制长度 + 手动加 \0）
//    char buf[100] = {0};  // 初始化为全 0，避免残留数据
//    size_t read_len = fread(buf, 1, strlen(msg) - 6, fp);  // 只读剩余长度
//    buf[read_len] = '\0';  // 手动加字符串终止符
//    printf("->从偏移位置读取：%s（实际读 %zu 字节）\n", buf, read_len);
//
//
//    // 6. rewind：重置指针到开头
//    rewind(fp);
//    printf("->rewind 重置指针到开头\n");
//
//
//    // 7. 再次读取全部内容（同理加 \0）
//    memset(buf, 0, sizeof(buf));  // 清空缓冲区
//    fread(buf, 1, strlen(msg), fp);
//    buf[strlen(msg)] = '\0';  // 确保终止符
//    printf("->重置后读取：%s\n", buf);
//
//
//    // 8. 关闭文件
//    fclose(fp);
//    return 0;
//}
  //fseek,ftell,rewind的测试
//  FILE*fp=fopen("myfile","r");
//  if(fp==NULL)
//  {
//    perror("fopen\n");
//    return 1;
//  }
//  const char*msg="hello File operator!\n";
//  fwrite(msg,strlen(msg),1,fp);
//  printf("已写入内容:%s",msg);
//  //移动文件指针
//  fseek(fp,6,SEEK_SET);
//  printf("->fseek移动指针到开头+6字节\n");
//  //ftell获取当前指针的位置
//  long pos=ftell(fp);
//  printf("->ftell 当前位置：%ld字节\n",pos);
//  //获取偏移后的内容
//  char buf[100]={0};
//  fread(buf,sizeof(buf),1,fp);
//  printf("->从偏移位置读取：%s",buf);
//  //rewind:重置指针到文件开头
//  rewind(fp);
//  printf("->rewind 重置指针到开头\n");
//
//  //验证rewind
//  memset(buf,0,sizeof(buf));
//  fread(buf,1,strlen(msg),fp);
//  printf("->重置后读取：%s",buf);
//
//  fclose(fp);
//
  //读文件
//  FILE*fp=fopen("myfile","r");
//  if(!fp)
//  {
//    perror("fopen\n");
//    return 1;
//  }
//  char buffer[1024];
//  const char* msg="hello linux!\n";
//  while(1)
//  {
//    size_t s=fwrite(msg,1,strlen(msg),fp);
//    if(s>0)
//    {
//      buffer[s]=0;
//      printf("%s\n",buffer);
//    }
//   if(feof(fp))
//   {
//      break;
//   }
//  }
//  fclose(fp);
//
//
  //写文件
 // FILE*fp=fopen("myfile","w");
 // if(!fp)
 // {
 //   perror("fopen");
 //   return 1;
 // }
 // const char* msg="hello bai\n";
 // int count=5;
 // while(count)
 // {
 //   fwrite(msg,strlen(msg),1,fp);
 //   count--;
 // }
 // fclose(fp);
//  return 0;
//}
